package thread.aqs;

/**
 * 一个同步装置的线程独占类，用这个类可以表示当前资源是由那个线程占用的。
 * @since 1.6
 * @author Doug Lea
 */
public abstract class AbstractOwnableSynchronizer
        implements java.io.Serializable {

    /** 序列化id */
    private static final long serialVersionUID = 3737899427754241961L;

    /**
     * 构造器。
     */
    protected AbstractOwnableSynchronizer() { }

    /**
     * 独占模式下的拥有者，一个线程对象。
     * 等价于【synchronized】原理中的【Monitor】对象下的【Owner】。
     */
    private transient Thread exclusiveOwnerThread;

    /**
     * 设置独占模式下占有线程的方法。
     */
    protected final void setExclusiveOwnerThread(Thread thread) {
        exclusiveOwnerThread = thread;
    }

    /**
     * 获取当前占用的线程的方法。
     */
    protected final Thread getExclusiveOwnerThread() {
        return exclusiveOwnerThread;
    }
}
